<?php
//用户订单接口
namespace service\service;

use service\ext\PageData;
use service\vo\user\UserVipOrder;

interface UserVipOrderService
{
    const ERROR_DATA_NOT_EXISTS = 'ERROR_DATA_NOT_EXISTS';
    const ERROR_CHARGE_INNER_NUM_NOT_EXISTS = 'ERROR_CHARGE_INNER_NUM_NOT_EXISTS';	//订单号不存在
    const ERROR_CHARGE_INNER_NUM_PAYED = 'ERROR_CHARGE_INNER_NUM_PAYED';	     //订单已支付
    const ERROR_CHARGE_MONEY_ERROR = 'ERROR_CHARGE_MONEY_ERROR';	     //订单金额不一致
    const ERROR_CHARGE_PAY_MONEY_ERROR = 'ERROR_CHARGE_PAY_MONEY_ERROR';	     //支付金额不一致
    const ERROR_CHARGE_EXPIRE_TIME = 'ERROR_CHARGE_EXPIRE_TIME';	     //订单已过期

    /**
     * 添加vip订单
     * @param UserVipOrder $userVipOrder    vip订单对象
     * @return int  新增加的id
     */
    public function addUserVipOrder(UserVipOrder $userVipOrder) : int;

    /**
     * 支付订单
     * @param string $innerNum  内部订单号
     * @param string $outNum    外部订单号
     * @param int $orderMoney 订单金额
     * @param int $payMoney 支付金额
     * @return int 影响的行数
     *
     * @throws
     *  ERROR_CHARGE_INNER_NUM_NOT_EXISTS
     *  ERROR_CHARGE_INNER_NUM_PAYED
     *  ERROR_CHARGE_MONEY_ERROR
     * ERROR_CHARGE_EXPIRE_TIME
     */
    public function payUserVipOrder(string $innerNum, string $outNum, int $orderMoney, int $payMoney) : int;

    /**
     * 删除订单
     * @param int $id   id
     * @return int  影响的行数
     */
    public function deleteUserVipOrderById(int $id) : int;

    /**
     * 批量删除订单
     * @param array $ids    订单id集合
     * @return int  影响的行数
     */
    public function deleteUserVipOrderByIds(array $ids) : int;

    /**
     * 根据内部订单号获取订单信息
     * @param int $innerNum 内部订单号
     * @return UserVipOrder 订单对象
     */
    public function getUserVipOrderByInnerNum(int $innerNum) : UserVipOrder;

    /**
     * 根据id获取订单信息
     * @param int $id   id
     * @return UserVipOrder   订单信息
     */
    public function getUserVipOrderById(int $id) : UserVipOrder;

    /**
     * 搜索订单
     * @param int $currentPage 当前页
     * @param int $pageSize 每页显示数量
     * @param array $filterCriteria //搜索条件数组，其中的value是搜索值，其中的key从下面字符串中取
     *        'InnerNum'            =>    内部订单号，模糊查询
     *        'OutNum'            =>    外部订单号，模糊查询
     *        'UserID'            =>    会员ID
     *        'AddTime'            =>    订单时间，array('start'=>'开始时间','end'=>'结束时间')
     *        'PayTime'            =>    支付时间，array('start'=>'开始时间','end'=>'结束时间')
     *        'PayType'            =>    支付方式
     *        'Status'            =>    支付状态，0.未支付，1.已支付
 * @param array $sorterCriteria //排序条件，其中的value是搜索值，其中的key从下面字符串中取
     *        'ID'    =>    true为升序false为降序
     *        'PayTime'        =>    支付时间，true为升序false为降序
     *
     * @return PageData
     */
    public function searchUserVipOrder(int $currentPage, int $pageSize, array $filterCriteria, array $sorterCriteria) : PageData;
}